let fs = require('fs')
function* read() {
  let content1 = yield fs.readFile('1', 'utf-8')
  let res = yield fs.readFile(content, 'utf-8')
  return res
}
//调用这个生成器后返回一个迭代器
//并且调用co函数后会发现后面执行then方法，来接收
//所以你所调用的co函数后会返回一个promise对象
//co函数内部要来返回一个promise对象
//为什么要用递归，因为你要不断的调用next()并把里面的值传递到上一次yield 后的结果
function* co(iterator) {
  return new Promise((resolve, reject) => {
    function next(data) {
      let { value, done } = iterator.next()
      if (!done) {
        Promise.resolve(value).then(data => {
          next(data)
        }, reject)
      } else {
        resolve(value)
      }
    }
    next()
  })
}

co(read()).then(data => {
  console.log(data);
}, err => {
  console.log(err);
})
